#!/usr/bin/env python
# -*- encoding: utf-8 -*-
'''
@fileName     : todo_file.py
@description  : 
@time         : 2022年02月21日 15:57
@author       : WeiTingjun
@versions     : 1.0
'''

import linecache

from epwechat.config import Config

MESSAGE_FILE = Config().get_section('FilePath', 'todo_pool').get('todo_pool')


def get_line(lineno):
    """
    获取指定行的待办
    :param lineno: 行号
    :return: 没有返回空字符
    """
    return linecache.getline(MESSAGE_FILE, lineno).strip()


def get_all_todos():
    """
    获取所有待办事项
    :return: 返回待办列表
    """
    all_todo = linecache.getlines(MESSAGE_FILE)
    return list(map(lambda todo: todo.strip(), all_todo[1:]))  # 删除文件第一行格式说明，并去除换行符


def get_all_todos_with_format_spec():
    """
    获取所有带格式说明的待办事项
    :return: 返回字典：待办列表+格式说明
    """
    return {"todo_list": get_all_todos(), "format_specification": get_line(1)}


def cover_save_todos(todo_list):
    """
    覆盖保存待办
    :param todo_list: 传入列表
    :return:
    """
    todo_list.insert(0, get_line(1).strip())  # 在第一行插入待办格式说明
    with open(MESSAGE_FILE, 'w', encoding="utf-8") as f:
        [f.write(str(item) + '\n') for item in todo_list]
    update_cache()


def additional_save_todo(todo_list):
    """
    追加保存待办
    :param todo_list: 传入列表
    :return:
    """
    with open(MESSAGE_FILE, 'a+', encoding="utf-8") as f:
        [f.write(str(item) + '\n') for item in todo_list]
    update_cache()


def update_cache():
    """
    更新缓存
    :return:
    """
    linecache.updatecache(MESSAGE_FILE)
